package jdbc01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 *  2.JDBC操作步骤
 *     a.导入要连接的数据库相关驱动
 *        导入MySQL驱动的jar包
 *     b.注册驱动
 *        告诉JVM使用的是哪个数据库驱动
 *        DriverManger类
 * 		    static void registerDriver(Driver driver)
 *           向 DriverManager 注册给定驱动程序。
 *     c.与数据库建立连接
 *       DriverManger类
 *        static Connection getConnection(String url, String user, String password)
 *           试图建立到给定数据库 URL 的连接。
 *     d.向数据库发送SQL语句并执行
 *       Connection接口中:
 *         Statement createStatement()
 *           创建一个 Statement 对象来将 SQL 语句发送到数据库。
 *       Statement接口中:
 *         ResultSet executeQuery(String sql)
 *           执行给定的 SQL 语句，该语句返回单个 ResultSet 对象。
 *     e.获取SQL语句的执行结果
 *       ResultSet接口:
 *           boolean next()方法:判断下一行是否有数据,有就返回true,没有就返回false
 *          xxx getXxxx(String columnLabel):根据列名取出对应的列的值
 *     f.释放资源
 */
public class JDBCDemo01 {
    public static void main(String[] args) throws Exception {
        //b.注册驱动
        //如果使用DriverManager类中的registerDriver方法来注册驱动
        //由于会加载com.mysql.jdbc.Driver类，导致Driver中的静态代码块执行
        //执行的静态代码块会再次注册一次驱动，导致驱动被重复注册
        //DriverManager.registerDriver(new Driver());
        Class.forName("com.mysql.jdbc.Driver");

        //c.与数据库建立连接
        //URL固定格式：jdbc:mysql://主机地址:端口号/数据库名字
        //如果连接的是本地机器上的Mysql,主机地址为:127.0.0.1 或 localhost
        String url = "jdbc:mysql://localhost:3306/test02";
        Connection conn = DriverManager.getConnection(url, "root", "root");
        System.out.println(conn);

        //d.向数据库发送SQL语句并执行
        Statement state = conn.createStatement();//创建一个发送SQL语句的平台
        ResultSet resultSet = state.executeQuery("SELECT * FROM product");//发送指定的SQL语句

        //e.获取SQL语句的执行结果
        while (resultSet.next()){
            //取出当行数据
            System.out.println(resultSet.getInt("pid") + " "
                    + resultSet.getString("pname") + " "
                    + resultSet.getDouble("price") + " "
                    + resultSet.getInt("cid")
            );
        }

        //f.释放资源
        conn.close();
        state.close();
        resultSet.close();
    }
}
